/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica;

import java.util.ArrayList;

/**
 *
 * @author Javier Arzarello
 */
public class Carrera {

    private String nombre;
    private int numero;
    //private boolean abierta;
    //private boolean cerrada;
    private int estado = definida;
    private ArrayList<Participante> participantes;
    private Participante ganador;
    private boolean actual = false;
    private ArrayList<Apuesta> apuestas;

    //CONSTANTES
    public static final int definida = 0;
    public static final int abierta = 1;
    public static final int cerrada = 2;
    public static final int finalizada = 3;

    //GETTER & SETTERS
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public int getEstado() {
        return estado;
    }

    public void setEstado(int estado) {
        this.estado = estado;
    }

    public static int getDefinida() {
        return definida;
    }

    public static int getAbierta() {
        return abierta;
    }

    public static int getCerrada() {
        return cerrada;
    }

    public static int getFinalizada() {
        return finalizada;
    }

    public Participante getGanador() {
        return ganador;
    }

    public void setGanador(Participante ganador) {
        this.ganador = ganador;
    }

    public ArrayList<Apuesta> getApuestas() {
        return apuestas;
    }

    public void setApuestas(ArrayList<Apuesta> apuestas) {
        this.apuestas = apuestas;
    }

    public boolean isActual() {
        return actual;
    }

    public void setActual(boolean actual) {
        this.actual = actual;
    }

    //public boolean isAbierta() {
    //    return abierta;
    //}
    //public void setAbierta(boolean abierta) {
    //    this.abierta = abierta;
    //}
//    public boolean isCerrada() {
//        return cerrada;
//    }
//
//    public void setCerrada(boolean cerrada) {
//        this.cerrada = cerrada;
//    }
    public ArrayList<Participante> getParticipantes() {
        return participantes;
    }

    public void setParticipantes(ArrayList<Participante> participantes) {
        this.participantes = participantes;
    }

    //CONSTRUCTOR
    public Carrera(String nombre, int numero) {
        this.nombre = nombre;
        this.numero = numero;
        this.estado = definida;
        this.participantes = new ArrayList();
        this.apuestas = new ArrayList();
        this.ganador = null;
    }

    //EQUALS
    @Override
    public boolean equals(Object o) {
        Carrera c = (Carrera) o;
        return getNombre().equalsIgnoreCase(c.getNombre());
    }

    public boolean agregarParticpante(Participante p) {
        boolean r = false;
        if (p.validar() && !participantes.contains(p)) {
            participantes.add(p);
            r = true;
        }
        return r;
    }

    public boolean buscarParticpante(Caballo c) {
        for (Participante p : participantes) {
            if (p.getCaballo().equals(c)) {
                return true;
            }
        }
        return false;
    }

    public Participante buscarParticpante(String nombre) {
        for (Participante p : participantes) {
            if (p.getCaballo().getNombre().equals(nombre)) {
                return p;
            }
        }
        return null;
    }

    //ELIMINAR PARTICIPANTE
    public boolean eliminarParticipante(String nombreCaballo) {
        for (Participante p : participantes) {
            if (p.getCaballo().getNombre().equals(nombreCaballo)) {
                participantes.remove(p);
                return true;
            }
        }
        return false;
    }

    //toSTRING
    @Override
    public String toString() {
        return numero + " - " + nombre;
    }

    public String getEstadoString() {
        if (this.getEstado() == 0) {
            return "definida";
        } else if (this.getEstado() == 1) {
            return "abierta";
        } else if (this.getEstado() == 2) {
            return "cerrada";
        } else {
            return "finalizada";
        }
    }

    public void AbrirCarrera() {
        //sacarle actual a la anterior
        
        this.setEstado(Carrera.abierta);
        this.setActual(true);
    }

    public boolean agregarApuesta(Apuesta a) {
        boolean r = false;
        if (a.validar()) {
            apuestas.add(a);
            r = true;
        }
        return r;
    }

    public void cerrarCarrera() {
        this.setEstado(Carrera.cerrada);
    }
}
